<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // https://juejin.cn/post/6844904116552990727#heading-12
        /*
            构造函数继承的缺点:
            继承不到父类原型上的属性和方法
        */
        function Parent(name) {
            this.name = [name]
        }
        Parent.prototype.getName = function () {
            return this.name
        }
        Parent.prototype.nickName = function () {
            return 'nickName'
        }
        function Child() {
            Parent.call(this, 'zhangsan')   // 执行父类构造方法并绑定子类的this, 使得父类中的属性能够赋到子类的this上
        }

        //测试
        const child1 = new Child()
        const child2 = new Child()
        child1.name[0] = 'foo'
        console.log(child1.name)          // ['foo']
        console.log(child2.name)          // ['zhangsan']
        console.log('child2.nickName', child2.nickName);//获取不到父类原型上的属性
        console.log('child2.getName', child2.getName);//获取不到父类原型上的方法
        child2.getName()                  // 报错,找不到getName(), 构造函数继承的方式继承不到父类原型上的属性和方法

    </script>
</body>

</html>